home *** CD-ROM | disk | FTP | other *** search
/ Light ROM 1 / LIGHT-ROM 1 (Amiga Library Services)(1994).iso / ffdisks / d883.lha / bbsQUICK / bbsQUICK59.lha / bbsQUICK.rexx < prev    next >
OS/2 REXX Batch file  |  1993-06-12  |  44KB  |  1,687 lines

  1. /* $VER: bbsQUICK.rexx 5.9 © 1993 Richard Lee Stockton (12.6.93)
  2.     - FREELY DISTRIBUTABLE AS LONG AS THIS NOTICE REMAINS -
  3.  
  4. requires: libs:rexxsyslib.library             c:LhA
  5.           libs:rexxsupport.library            c:join
  6.           libs:rexxarplib.library             c:copy
  7.           libs:rexxmathlib.library            c:delete
  8.           libs:screenshare.library            c:version
  9.           libs:arp.library
  10.  
  11.  - Preferences -
  12. prefs.0 = color data
  13. prefs.1 = work dir
  14. prefs.2 = download dir
  15. prefs.3 = upload dir
  16. prefs.4 = editor
  17. */
  18.  
  19. IF SHOW('P','QUICKHOST') THEN
  20.   DO
  21.     ADDRESS QUICKPORT FRONT
  22.     EXIT 0
  23.   END
  24.  
  25. IF ~SHOW('L','rexxsupport.library') THEN
  26.   CALL ADDLIB('rexxsupport.library',0,-30,0)
  27.  
  28. IF ~SHOW('L','rexxarplib.library') THEN
  29.   CALL ADDLIB('rexxarplib.library',0,-30,0)
  30.  
  31. CALL setup_variables()
  32. CALL setup_screen()
  33. CALL setup_host()
  34.  
  35. w.=''
  36. w.cols=ScreenCols(QUICKSCREEN)
  37. w.rows=ScreenRows(QUICKSCREEN)-1
  38. /* w.cols=640; w.rows=200 */
  39. lines_per_page=(w.rows-43)%8
  40. chars=(w.cols-48)%8
  41. w.idcmp='CLOSEWINDOW+MENUPICK+GADGETUP'
  42. w.flags='WINDOWCLOSE+ACTIVATE'
  43.  
  44. IF EXISTS(prefspath) THEN SIGNAL START
  45.  
  46. START_PREFS:
  47. p.=''
  48. p.title=CENTER('Please Enter Your Preferences',44)
  49. CALL OpenWindow(QUICKHOST,120,30,400,130,w.idcmp,w.flags,p.title)
  50.  
  51. CALL AddMenu(QUICKHOST,'Preferences    ')
  52. CALL AddItem(QUICKHOST,' Help','HELP','H')
  53. CALL AddItem(QUICKHOST,' Colors ...','COLORS','C')
  54. CALL AddItem(QUICKHOST,' Load ...','LOAD','L')
  55. CALL AddItem(QUICKHOST,' Save ...','SAVE',';')
  56. CALL AddItem(QUICKHOST,' Use','USE','U')
  57. CALL AddItem(QUICKHOST,' Cancel','CLOSEWINDOW','Q')
  58. CALL AddItem(QUICKHOST,' About','ABOUT')
  59.  
  60. pp.1='Work Dir:'
  61. pp.2='Download Dir:'
  62. pp.3='Upload Dir:'
  63. pp.4='Editor:'
  64. DO i=0 TO 9
  65.   p.i=prefs.i
  66. END
  67. DO i=1 TO 4
  68.   CALL SETAPEN(QUICKHOST,1)
  69.   CALL MOVE(QUICKHOST,18,29+17*i)
  70.   CALL TEXT(QUICKHOST,RIGHT(pp.i,16))
  71.   CALL AddGadget(QUICKHOST,158,23+17*i,i,p.i,'PREFS' i '%g',220,RIDGEBORDER)
  72. END
  73.  
  74. CALL AddGadget(QUICKHOST, 40,112,4,' Save ','SAVE')
  75. CALL AddGadget(QUICKHOST,180,112,5,' Use ','USE')
  76. CALL AddGadget(QUICKHOST,300,112,6,' Cancel ','CLOSEWINDOW')
  77. CALL AddGadget(QUICKHOST, 40,16,7,' Load ','LOAD')
  78. CALL AddGadget(QUICKHOST,176,16,8,' HELP ','HELP')
  79. CALL AddGadget(QUICKHOST,300,16,9,' Colors ','COLORS')
  80.  
  81. CALL tofront(QUICKHOST)
  82. CALL box(QUICKHOST,1,1,11,30,378,77)
  83. CALL SetAPen(QUICKHOST,3)
  84. CALL Flood(QUICKHOST,1,5,15)
  85. lastgad=1
  86.  
  87.  
  88. LOOP_PREFS:
  89. CALL SCREENTOFRONT(QUICKSCREEN)
  90. CALL SetAPen(QUICKHOST,1)
  91. DO FOREVER
  92.   CALL ActivateGadget(QUICKHOST,lastgad)
  93.   t=waitpkt(QUICKPORT)
  94.   DO ff=1
  95.     p=GETPKT(QUICKPORT)
  96.     IF c2d(p)=0 THEN LEAVE ff
  97.     command=GETARG(p)
  98.     PARSE VAR command arg1' 'arg2' 'arg3
  99.     t=REPLY(p,0)
  100.     SELECT
  101.       WHEN arg1='LOAD' THEN CALL config('LOAD')
  102.       WHEN arg1='SAVE' | arg1='USE' | arg1='CLOSEWINDOW' THEN
  103.         DO
  104.           DO i=1 TO 9 WHILE arg1~='CLOSEWINDOW'
  105.             prefs.i=p.i
  106.           END
  107.           CALL MAKEDIR(prefs.1)
  108.           CALL PRAGMA('D',prefs.1)
  109.           arcdir=makepath(prefs.3,'OUT')
  110.           CALL MAKEDIR(arcdir)
  111.           IF arg1='SAVE' THEN CALL config('SAVE')
  112.           CALL CloseWindow(QUICKHOST,'CONTINUE')
  113.           SIGNAL START
  114.         END
  115.       WHEN arg1='HELP' THEN CALL Request(,12,prefshelp,,,,QUICKSCREEN)
  116.       WHEN arg1='ABOUT' THEN CALL Request(200,45,abouttext,,,,QUICKSCREEN)
  117.       WHEN arg1='PREFS' THEN
  118.         DO
  119.           n=arg2
  120.           p.n=arg3
  121.           n=n+1
  122.           IF n>4 THEN n=1
  123.           lastgad=n
  124.         END
  125.       WHEN arg1='COLORS' THEN
  126.         INTERPRET ADDRESS AREXX Palette.rexx QUICKSCREEN 4 QUICKPORT 
  127.       WHEN arg1='NEW_COLORS' THEN p.0=new_colors()
  128.       WHEN arg1='MOUSEBUTTONS' THEN NOP
  129.       WHEN arg1='SELECTUP'     THEN NOP
  130.       WHEN arg1='CONTINUE'     THEN NOP
  131.       OTHERWISE CALL Request(,100,command,,,,QUICKSCREEN)
  132.     END
  133.   END
  134. END
  135.  
  136.  
  137. START:
  138. projects=SHOWDIR(prefs.1)
  139. IF WORDS(projects)=1 THEN
  140.   DO
  141.     arcdir=makepath(prefs.3,'OUT/'projects)
  142.     CALL MAKEDIR(arcdir)
  143.     workdir=makepath(prefs.1,projects)
  144.     CALL MAKEDIR(workdir)
  145.     CALL PRAGMA('D',workdir)
  146.   END
  147. ELSE IF projects~='' THEN CALL newarea()
  148. IF EXISTS('.ID') THEN CALL read_ID()
  149. ELSE CALL openarc()
  150.  
  151. RESTART:
  152. IF mode=0 THEN w.title='Notices and Information'
  153. IF mode=1 THEN w.title='Private EMail Messages'
  154. IF mode=2 THEN w.title='New Conferences Messages'
  155. IF mode=3 THEN w.title='Public Message Conferences'
  156. IF mode=4 THEN w.title='New File Descriptions'
  157. IF mode=5 THEN w.title='Public File Libraries'
  158. w.title=RIGHT(bbsname w.title,75)
  159. CALL OpenWindow(QUICKHOST,,9,w.cols,w.rows-8,w.idcmp,w.flags,w.title)
  160. CALL SetFont(QUICKHOST,'topaz.font',8)
  161.  
  162. CALL AddMenu(QUICKHOST,'Project       ')
  163. CALL AddItem(QUICKHOST,' New','NEW')
  164. CALL AddItem(QUICKHOST,' Open ...','OPEN','O')
  165. CALL AddItem(QUICKHOST,' Archive','ARC','A')
  166. /* CALL AddItem(QUICKHOST,' Help','HELP','H') */
  167. CALL AddItem(QUICKHOST,' Info','INFO','I')
  168. CALL AddItem(QUICKHOST,' About','ABOUT')
  169. CALL AddItem(QUICKHOST,' Quit','CLOSEWINDOW','Q')
  170.  
  171. CALL AddMenu(QUICKHOST,'Movement            ')
  172. CALL AddItem(QUICKHOST,' Line Forward','LINE UP','.')
  173. CALL AddItem(QUICKHOST,' Line Back','LINE BACK',',')
  174. CALL AddItem(QUICKHOST,' Page Forward','PAGE UP','F')
  175. CALL AddItem(QUICKHOST,' Page Back','PAGE BACK','B')
  176. CALL AddItem(QUICKHOST,' Zip to Beg/End','PAGE ZIP','Z')
  177.  
  178. CALL AddMenu(QUICKHOST,'Commands      ')
  179. CALL AddItem(QUICKHOST,' Mode ...','CONTINUE')
  180. CALL AddSubItem(QUICKHOST,'   Notices','MODE 0','1',62)
  181. CALL AddSubItem(QUICKHOST,'   EMail','MODE 1','2',61)
  182. CALL AddSubItem(QUICKHOST,'   Messages','MODE 2','3',59)
  183. CALL AddSubItem(QUICKHOST,'   Conferences','MODE 3','4',55)
  184. CALL AddSubItem(QUICKHOST,'   FileList','MODE 4','5',47)
  185. CALL AddSubItem(QUICKHOST,'   Libraries','MODE 5','6',31)
  186. CALL AddItem(QUICKHOST,' Print','PRINT','[')
  187. CALL AddItem(QUICKHOST,' Search','SEARCH','S')
  188. IF mode<2 THEN CALL AddItem(QUICKHOST,' Delete','KILL','K')
  189. IF mode<3 THEN
  190.   DO
  191.     CALL AddItem(QUICKHOST,' Previous','NEXT BACK','P')
  192.     CALL AddItem(QUICKHOST,' Next','NEXT FORWARD','N')
  193.   END
  194. IF mode=1 | mode=2 | mode=3 THEN
  195.     CALL AddItem(QUICKHOST,' Write','WRITE','W')
  196. IF mode=4 THEN
  197.   DO
  198.     CALL AddItem(QUICKHOST,' Download','DOWNLOAD','D')
  199.     IF level>=sysoplevel THEN
  200.       DO
  201.         CALL AddItem(QUICKHOST,' Kill','DELETE')
  202.         CALL AddItem(QUICKHOST,' Change','CHANGE')
  203.       END
  204.     IF WORDS(SHOWDIR(makepath(workdir,'EmailFiles')'/'name))>0 THEN
  205.       CALL AddItem(QUICKHOST,' EmailFiles','EFILES','E')
  206.   END
  207. IF mode=5 THEN CALL AddItem(QUICKHOST,' Upload','UPLOAD','U')
  208. CALL SetItem(QUICKHOST,2,0,mode,'ON')
  209.  
  210. CALL AddMenu(QUICKHOST,'Preferences     ')
  211. CALL AddItem(QUICKHOST,' Set ...','CONFIG SET','/')
  212. CALL AddItem(QUICKHOST,' Load ...','CONFIG LOAD','L')
  213. CALL AddItem(QUICKHOST,' Save ...','CONFIG SAVE',';')
  214. CALL AddItem(QUICKHOST,' Colors ...','COLORS','C')
  215.  
  216. IF mode<3 THEN
  217.   DO
  218.     CALL AddGadget(QUICKHOST,110,14,2,' Previous ','NEXT BACK')
  219.     CALL AddGadget(QUICKHOST,210,14,3,' Next ','NEXT FORWARD')
  220.   END
  221. IF mode=1 | mode=2 | mode=3 THEN
  222.   CALL AddGadget(QUICKHOST,20,14,1,' Write ','WRITE')
  223. IF mode=4 THEN
  224.   DO
  225.     CALL AddGadget(QUICKHOST,14,14,1,' Download ','DOWNLOAD')
  226.     IF level>=sysoplevel THEN
  227.       CALL AddGadget(QUICKHOST,108,14,2,' Kill ','DELETE')
  228.     IF WORDS(SHOWDIR(makepath(workdir,'EmailFiles')'/'name))>0 THEN
  229.       CALL AddGadget(QUICKHOST,170,14,3,' EmailFiles ','EFILES')
  230.   END
  231. IF mode=5 THEN CALL AddGadget(QUICKHOST,20,14,1,' Upload ','UPLOAD')
  232. CALL AddGadget(QUICKHOST,w.cols-130,14,4,' Page Forward ','PAGE UP')
  233. CALL AddGadget(QUICKHOST,w.cols-235,14,5,' Page Back ','PAGE BACK')
  234. CALL AddGadget(QUICKHOST,280,14,6,CENTER(modetext.mode,13),'NEW_MODE')
  235. CALL SetGadget(QUICKHOST,6,'ON')
  236. CALL tofront(QUICKHOST)
  237. CALL boxes()
  238. CALL SetAPen(QUICKHOST,3)
  239. CALL Flood(QUICKHOST,1,5,15)
  240. CALL read_QUICK()
  241.  
  242.  
  243.                              /* Wait Loop */
  244. LOOP:
  245. CALL SCREENTOFRONT(QUICKSCREEN)
  246. CALL SetAPen(QUICKHOST,1)
  247. DO FOREVER
  248.   t=waitpkt(QUICKPORT)
  249.   DO ff=1
  250.     p=GETPKT(QUICKPORT)
  251.     IF c2d(p)=0 THEN LEAVE ff
  252.     command=GETARG(p)
  253.     PARSE VAR command arg1' 'arg2' 'arg3' 'arg4
  254.     t=REPLY(p,0)
  255.     SELECT
  256.       WHEN arg1='FRONT'        THEN CALL tofront(QUICKHOST)
  257.       WHEN arg1='NEW'          THEN CALL new()
  258.       WHEN arg1='OPEN'         THEN CALL openarc()
  259.       WHEN arg1='INFO'         THEN CALL info()
  260.       WHEN arg1='HELP'         THEN CALL Request(,12,mainhelp,,,,QUICKSCREEN)
  261.       WHEN arg1='ABOUT'        THEN CALL Request(200,45,abouttext,,,,QUICKSCREEN)
  262.       WHEN arg1='CLOSEWINDOW'  THEN CALL ALL_DONE('')
  263.       WHEN arg1='LINE'         THEN CALL line(arg2)
  264.       WHEN arg1='PAGE'         THEN CALL page(arg2)
  265.       WHEN arg1='PRINT'        THEN CALL print()
  266.       WHEN arg1='WRITE'        THEN CALL write()
  267.       WHEN arg1='SEARCH'       THEN CALL searchreq()
  268.       WHEN arg1='NEXT'         THEN CALL nextitem(arg2)
  269.       WHEN arg1='UPLOAD'       THEN CALL upload()
  270.       WHEN arg1='DOWNLOAD'     THEN CALL do_action('Download')
  271.       WHEN arg1='DELETE'       THEN CALL do_action('Delete')
  272.       WHEN arg1='EFILES'       THEN CALL efiles()
  273.       WHEN arg1='KILL'         THEN CALL kill()
  274.       WHEN arg1='CHANGE'       THEN CALL do_action('Change')
  275.       WHEN arg1='ARC'          THEN CALL archive()
  276.       WHEN arg1='MODE'         THEN DO;mode=arg2;CALL whichmode(0);END
  277.       WHEN arg1='CONFIG'       THEN CALL config(arg2)
  278.       WHEN arg1='COLORS'       THEN
  279.         INTERPRET ADDRESS AREXX Palette.rexx QUICKSCREEN 4 QUICKPORT 
  280.       WHEN arg1='NEW_COLORS'   THEN prefs.0=new_colors()
  281.       WHEN arg1='NEW_MODE'     THEN CALL whichmode(1)
  282.       WHEN arg1='MOUSEBUTTONS' THEN NOP
  283.       WHEN arg1='SELECTUP'     THEN NOP
  284.       WHEN arg1='CONTINUE'     THEN NOP
  285.       OTHERWISE CALL Request(,100,command 'is not finished...',,,,QUICKSCREEN)
  286.     END
  287.   END
  288. END
  289. CALL ALL_DONE('This error should never occur.')
  290. EXIT
  291.  
  292.  
  293. /* Functions */
  294.  
  295. ALL_DONE:
  296. PARSE ARG air
  297. IF air~='' THEN
  298.   DO
  299.     CALL usermsg(air)
  300.     CALL waiting()
  301.   END
  302. IF WORDS(SHOWDIR(arcdir,'F'))>0 THEN
  303.   DO
  304.     temp='There are files ready to be archived for sending... Do it now?'
  305.     IF Request(,36,temp,,' NOW ',' LATER ',QUICKSCREEN)='OKAY' THEN
  306.       CALL archive()
  307.   END
  308. IF SHOW('P','QUICKHOST') THEN CALL Stop('QUICKHOST')
  309. CALL CloseScreen(QUICKSCREEN)
  310. EXIT
  311.  
  312.  
  313. efiles:
  314. ef=SHOWDIR('EmailFiles/'name)
  315. IF ef="" THEN
  316.   DO
  317.     CALL usermsg('No emailfiles were found!')
  318.     CALL waiting()
  319.     RETURN
  320.   END
  321. ename=GetFile(150,16,makepath(workdir,'EmailFiles/'name),,'Select File To Move',QUICKSCREEN)
  322. IF ename='' | ~EXISTS(ename) THEN RETURN
  323. sname=SUBSTR(ename,LASTPOS('/',ename)+1)
  324. dname=GetFile(150,16,prefs.2,sname,'Select Destination',QUICKSCREEN)
  325. IF dname='' THEN RETURN
  326. IF WORD(STATEF(dname),1)='FILE' THEN
  327.   DO
  328.     IF Request(,36,dname 'exists! Replace it?',,' REPLACE ',' CANCEL ',QUICKSCREEN)='OKAY' THEN
  329.       CALL DELETE(dname)
  330.     ELSE RETURN
  331.   END
  332. ELSE IF ~EXISTS(dname) THEN
  333.   DO
  334.     dd=LASTPOS('/',dname)-1
  335.     IF dd<1 THEN dd=LASTPOS(':',dname)
  336.     ddir=LEFT(dname,dd)
  337.     IF WORD(STATEF(ddir),1)~='DIR' THEN
  338.       DO
  339.         CALL usermsg(ddir 'does not exist!')
  340.         CALL waiting()
  341.         RETURN
  342.       END
  343.   END
  344. ADDRESS COMMAND 'copy' ename dname
  345. CALL DELETE(ename)
  346. RETURN
  347.  
  348.  
  349. archive:
  350. IF WORDS(SHOWDIR(arcdir))=0 THEN
  351.   DO
  352.     CALL usermsg('Nothing To Archive!')
  353.     CALL waiting()
  354.     RETURN
  355.   END
  356. IF arcdir=makepath(prefs.3,'OUT') & WORDS(SHOWDIR(arcdir,'D'))>0 THEN
  357.   DO
  358.     dirs=SHOWDIR(arcdir,'D')
  359.     temp='Select BBS by number...\'
  360.     iii=0
  361.     DO ii=1 TO WORDS(dirs)
  362.       IF WORDS(SHOWDIR(makepath(arcdir,WORD(dirs,ii))))=0 THEN ITERATE ii
  363.       iii=iii+1
  364.       IF iii=16 & WORDS(dirs)>ii THEN
  365.         DO
  366.           temp=temp'\ - Too many to fit! -'
  367.           LEAVE ii
  368.         END
  369.       temp=temp'\'RIGHT(ii,2)'.' WORD(dirs,ii)
  370.     END
  371.     IF iii=0 THEN
  372.       DO
  373.         CALL usermsg('Nothing To Archive!')
  374.         CALL waiting()
  375.         RETURN
  376.       END
  377.     temp=Request(150,,temp,'',,' CANCEL ',QUICKSCREEN)
  378.     IF temp='' | ~DATATYPE(temp,'W') THEN RETURN
  379.     IF temp<1 | temp>WORDS(dirs) THEN RETURN
  380.     arcdir=makepath(arcdir,WORD(dirs,temp))
  381.     CALL archive()
  382.     RETURN
  383.   END
  384. arcname=GetFile(150,16,prefs.3,'To'bbsnym'.lha','Name This QUICKIN Archive',QUICKSCREEN)
  385. IF arcname='' THEN RETURN
  386. IF EXISTS(arcname) THEN
  387.   DO
  388.     IF Request(,36,arcname 'exists. Delete the old one?',,' DELETE ',' CANCEL ',QUICKSCREEN)='OKAY' THEN
  389.       CALL DELETE(arcname)
  390.     ELSE RETURN
  391.   END
  392. CALL usermsg('Building Archive' arcname'...')
  393. ADDRESS COMMAND 'CD' arcdir LF 'lha -2arq m' arcname '#?'
  394. CALL PostMsg()
  395. RETURN
  396.  
  397.  
  398. editor:
  399. PARSE ARG tname 
  400. IF prefs.4='' THEN prefs.4='Ed'
  401. clicomm='CD' arcdir LF prefs.4 tname
  402. IF ksversion>=37 & UPPER(prefs.4)='ED' THEN
  403.   clicomm=clicomm' WINDOW=CON:/2/'ScreenCols()'/'Screenrows()-2'/'QUICK'/C'
  404. CALL SCREENTOBACK(QUICKSCREEN)
  405. ADDRESS COMMAND clicomm
  406. CALL SCREENTOFRONT(QUICKSCREEN)
  407. RETURN
  408.  
  409.  
  410. kill:
  411. IF mode=0 THEN
  412.   DO
  413.     IF Request(,36,'Delete' tfile'?',,' DELETE ',' CANCEL ',QUICKSCREEN)~='OKAY' THEN
  414.       RETURN
  415.     CALL DELETE(makepath(workdir,tfile))
  416.     noticecount=noticecount+1
  417.     CALL CloseWindow(QUICKHOST,'CONTINUE')
  418.     SIGNAL RESTART
  419.   END
  420. IF Request(,36,'Delete Email' email.emailcount'?',,' DELETE ',' CANCEL ',QUICKSCREEN)~='OKAY' THEN
  421.   RETURN
  422. IF DELETE(makepath(workdir,'Email/'name'/'email.emailcount)) THEN
  423.   DO
  424.     CALL usermsg('Deleting' email.emailcount'...')
  425.     email.emailcount=''
  426.     CALL nextitem('FORWARD')
  427.   END
  428. RETURN
  429.  
  430.  
  431. write:
  432. IF name='' THEN RETURN
  433. IF mode=1 THEN
  434.   DO
  435.     IF DATATYPE(email.0,'W') & email.emailcount~='' THEN
  436.       DO
  437.         IF LEFT(email.emailcount,3)='MSG' THEN
  438.           DO
  439.             IF Request(,36,'Return this message to the conferences?',,' YES ',' NO ',QUICKSCREEN)~='OKAY' THEN
  440.               RETURN
  441.             CALL usermsg('Returning' email.emailcount 'to message conferences...')
  442.             CALL MAKEDIR(arcdir'/MSG')
  443.             com='COPY' makepath(workdir,'Email/'name'/'email.emailcount)
  444.             com=com makepath(arcdir,'MSG')
  445.             ADDRESS COMMAND com
  446.             CALL DELETE(makepath(workdir,'Email/'name'/'email.emailcount))
  447.             CALL PostMsg()
  448.             IF Request(,36,'Edit this message?',,' YES ',' NO ',QUICKSCREEN)~='OKAY' THEN
  449.               RETURN
  450.             CALL editor('MSG/'email.emailcount)
  451.             RETURN
  452.           END
  453.         dot=LASTPOS('.',email.emailcount)
  454.         IF dot<1 THEN toname=''
  455.         ELSE toname=LEFT(email.emailcount,dot-1)
  456.         tonamecity=SUBSTR(text.2,8)
  457.         subj=STRIP(LEFT(SUBSTR(text.4,8),66))
  458.       END
  459.     ELSE
  460.       DO
  461.         subj=''
  462.         toname=''
  463.         tonamecity='?'
  464.       END
  465.     hdr.=''
  466.     hdr.1=' Mail: QUICK'
  467.     hdr.2=' From: 'name '-' city
  468.     temp=hdr.1'\'hdr.2'\   To:' tonamecity
  469.     x=Request(,36,temp,toname,,,QUICKSCREEN)
  470.     IF x='' THEN RETURN
  471.     x=SPACE(UPPER(cleanstring(x)),1,'_')
  472.     IF x='SYSOP' & sysop~='' THEN x=sysop
  473.     IF x~=toname THEN
  474.       DO
  475.         toname=x
  476.         tonamecity=toname
  477.       END
  478.     hdr.3='   To: 'tonamecity
  479.     temp=hdr.1'\'hdr.2'\'hdr.3'\ Subj:'
  480.     subj=Request(,36,temp,subj,,,QUICKSCREEN)
  481.     IF subj='' THEN subj='?'
  482.     hdr.4=' Subj: 'subj
  483.     hdr.5=' Date: 'DATE('W') DATE() TIME('C')
  484.     hdr.6=RIGHT(WORD(SOURCELINE(1),4)'=====',74,'=')
  485.     temp=hdr.1'\'hdr.2'\'hdr.3'\'TRIM(LEFT(hdr.4,74))'\'hdr.5'\'hdr.6
  486.     IF Request(,36,temp,,' WRITE ',' CANCEL ',QUICKSCREEN)~='OKAY' THEN
  487.       RETURN
  488.     msgnum=get_number()
  489.     IF write_hdr(6) THEN RETURN
  490.     IF tonamecity~=toname THEN
  491.       DO
  492.         IF Request(,36,'Include Original Email From' toname '?',,' INCLUDE ',' LEAVE OUT ',QUICKSCREEN)='OKAY' THEN
  493.           DO
  494.             x=OPEN(f,txtfile,'W')
  495.             IF x=0 THEN
  496.               DO
  497.                 CALL usermsg(txtfile 'failed to open for writing!')
  498.                 CALL waiting()
  499.               END
  500.             ELSE
  501.               DO i=7 TO text.0
  502.                 CALL WRITELN(f,'>'text.i)
  503.               END
  504.             CALL CLOSE(f)
  505.           END
  506.       END
  507.     CALL editor(txtfile)
  508.     IF Request(,36,'Attach a file to this letter?',,' YES ',' NO ',QUICKSCREEN)~='OKAY' THEN
  509.       RETURN
  510.     mailfile=GetFile(150,16,prefs.3,,'Select file to attach.',QUICKSCREEN)
  511.     IF mailfile='' | ~EXISTS(mailfile) THEN RETURN
  512.     CALL MAKEDIR(arcdir'/Files')
  513.     ADDRESS COMMAND 'copy' mailfile arcdir'/Files'
  514.     hdr.1=hdr.1'    FILE:' getfilename(mailfile)
  515.     CALL write_hdr(6)
  516.     CALL usermsg('Mail will be sent to' toname'.')
  517.     CALL waiting()
  518.     RETURN
  519.   END
  520. IF mode=2 THEN
  521.   DO
  522.     n=Request(150,36,'Reply To What Message NUMBER?','',,' CANCEL ',QUICKSCREEN)
  523.     IF ~DATATYPE(n,'W') THEN RETURN
  524.     ln=search(1 '  Msg:' n)
  525.     IF ln=0 THEN
  526.       DO
  527.         CALL usermsg('Msg:' n 'not found in the' WORD(mess.0.1,messcount) 'Conference!')
  528.         CALL waiting()
  529.         RETURN
  530.       END
  531.     temp=text.ln
  532.     DO lnn=ln+1 TO ln+12
  533.       temp=temp'\'TRIM(LEFT(text.lnn,74))
  534.     END
  535.     IF Request(,36,temp,,' REPLY ',' CANCEL ',QUICKSCREEN)~='OKAY' THEN RETURN
  536.     lnn=ln+1
  537.     toname=WORD(text.lnn,2)
  538.     lnn=ln+3
  539.     subj=STRIP(LEFT(SUBSTR(text.lnn,8),66))
  540.     conf=WORD(mess.0.1,messcount)
  541.   END
  542. IF mode=3 THEN
  543.   DO
  544.     confnum=''
  545.     DO WHILE ~DATATYPE(confnum,'W')
  546.       confnum=Request(,36,'Select Message Conference by NUMBER','',,' CANCEL ',QUICKSCREEN)
  547.       IF confnum='' THEN RETURN
  548.     END
  549.     confnum=' 'confnum%1'.'
  550.     linenum=search(1 confnum)
  551.     IF linenum=0 THEN
  552.       DO
  553.         CALL usermsg('Unknown Message Conference number!')
  554.         CALL waiting()
  555.         RETURN
  556.       END
  557.     wordnum=FIND(text.linenum,confnum)+1
  558.     conf=WORD(text.linenum,wordnum)
  559.     toname=Request(,36,'Post This Message To Who?','',,,QUICKSCREEN)
  560.     toname=SPACE(UPPER(cleanstring(toname)),1,'_')
  561.     IF toname='' THEN toname='ALL'
  562.     IF toname='SYSOP' & sysop~='' THEN toname=sysop
  563.     subj=''
  564.   END
  565. hdr.=''
  566. hdr.1='  Msg: QUICK'
  567. hdr.2=' From: 'name '-' city
  568. hdr.3='   To: 'toname
  569. IF mode=2 THEN hdr.3=hdr.3'   Msg' n
  570. temp=hdr.1'\'hdr.2'\'hdr.3'\ Subj:'
  571. subj=Request(,36,temp,subj,,,QUICKSCREEN)
  572. IF subj='' THEN subj='?'
  573. hdr.4=' Subj:' subj
  574. hdr.5=' Date:' DATE('W') DATE() TIME('C')
  575. hdr.5=LEFT(hdr.5,39) 'Conference:' conf
  576. hdr.6=RIGHT(WORD(SOURCELINE(1),4)'=====',74,'=')
  577. temp=hdr.1'\'hdr.2'\'hdr.3'\'TRIM(LEFT(hdr.4,74))'\'TRIM(LEFT(hdr.5,74))'\'hdr.6
  578. IF Request(,36,temp,,' WRITE ',' CANCEL ',QUICKSCREEN)~='OKAY' THEN
  579.   RETURN
  580. msgnum=get_number()
  581. IF write_hdr(6) THEN RETURN
  582. IF mode=1 & tonamecity~=toname THEN
  583.   DO
  584.     IF Request(,36,'Include Original Email From' toname '?',,' INCLUDE ',' LEAVE OUT ',QUICKSCREEN)='OKAY' THEN
  585.       DO
  586.         x=OPEN(f,txtfile,'W')
  587.         IF x=0 THEN
  588.           DO
  589.             CALL usermsg(txtfile 'failed to open for writing!')
  590.             CALL waiting()
  591.           END
  592.         ELSE
  593.           DO i=7 TO text.0
  594.             CALL WRITELN(f,'>'text.i)
  595.           END
  596.         CALL CLOSE(f)
  597.       END
  598.   END
  599. CALL editor(txtfile)
  600. RETURN
  601.  
  602.  
  603. write_hdr:
  604. ARG hdrlines 
  605. x=OPEN(f,hdrfile,'W')
  606. IF x=0 THEN
  607.   DO
  608.     CALL usermsg(hdrfile 'failed to open for writing!')
  609.     CALL waiting()
  610.     RETURN 1
  611.   END
  612. DO i=1 TO hdrlines
  613.   CALL WRITELN(f,hdr.i)
  614. END
  615. CALL CLOSE(f)
  616. RETURN 0
  617.  
  618.  
  619. get_number:
  620. DO i=.001 TO .999 BY .001
  621.   hdrfile=makepath(arcdir,RIGHT(i,3)'.HDR')
  622.   txtfile=makepath(arcdir,RIGHT(i,3)'.TXT')
  623.   IF ~EXISTS(hdrfile) THEN RETURN i
  624. END
  625. RETURN
  626.  
  627.  
  628. cleanstring:
  629. PARSE ARG cstr
  630. bot=TRIM(XRANGE(,' '))
  631. top=XRANGE('7B'x)
  632. cstr=STRIP(COMPRESS(cstr,bot||top))
  633. RETURN cstr
  634.  
  635.  
  636. upload:
  637. IF name='' THEN RETURN
  638. fullfile=GetFile(150,16,prefs.3,,'Select file to upload.',QUICKSCREEN)
  639. IF fullfile='' | ~EXISTS(fullfile) THEN RETURN
  640. finfo=STATEF(fullfile)
  641. namelen=23-LENGTH(WORD(finfo,2))
  642. ufile=getfilename(fullfile)
  643. ufile=COMPRESS(cleanstring(ufile),'()#?*;=')  /* remove DOS reserved chars */
  644. DO test=1
  645.   IF LENGTH(ufile)<namelen THEN LEAVE test
  646.   temp='Your filename,' ufile', is' LENGTH(ufile)-namelen 'character'
  647.   IF (LENGTH(ufile)-namelen)>1 THEN temp=temp's'
  648.   temp=temp 'too long!'
  649.   temp=temp'\Please enter new filename:'
  650.   ufile=Request(100,120,temp,ufile,,' CANCEL ',QUICKSCREEN)
  651.   ufile=COMPRESS(cleanstring(ufile),'()#?*;=')
  652.   IF ufile='' THEN RETURN
  653. END
  654. libnum=''
  655. DO WHILE ~DATATYPE(libnum,'W')
  656.   libnum=Request(390,120,'Select Library by NUMBER','',,' CANCEL ',QUICKSCREEN)
  657.   IF libnum='' THEN RETURN
  658. END
  659. libnum=' 'libnum%1'.'
  660. linenum=search(1 libnum)
  661. IF linenum=0 THEN
  662.   DO
  663.     CALL usermsg('Unknown library number!')
  664.     CALL waiting()
  665.     RETURN
  666.   END
  667. wordnum=FIND(text.linenum,libnum)+1
  668. filedir=WORD(text.linenum,wordnum)
  669. temp='FileName:' ufile
  670. temp=temp'\ Library:' filedir'\'
  671. temp=temp'\Please Enter Keywords'
  672. temp=temp'\(or a condensed description)'
  673. temp=temp'\32 characters MAXIMUM...........|'
  674. keywords=''
  675. DO WHILE keywords=''
  676.   keywords=Request(,36,temp,'',,,QUICKSCREEN)
  677. END
  678. keywords=STRIP(LEFT(cleanstring(keywords),32))
  679. bytes=WORD(STATEF(fullfile),2)
  680. hdr.=''
  681. hdr.1='File: QUICK   KeyWords:' keywords
  682. hdr.2='Name: 'LEFT(ufile,27)' Size: 'bytes' bytes   Downloads: 0'
  683. hdr.3='From: 'LEFT(name,27)' Date: 'DATE() TIME('C')'  Lib: 'filedir
  684. hdr.4=RIGHT(WORD(SOURCELINE(1),4)'=====',74,'=')
  685. msgnum=get_number()
  686. temp=hdr.1'\'hdr.2'\'TRIM(LEFT(hdr.3,74))'\'hdr.4
  687. IF Request(,36,'Add a longer file description?',,' YES ',' NO ',QUICKSCREEN)='OKAY' THEN
  688.   DO
  689.     CALL editor(txtfile)
  690.     CALL DELAY(50)
  691.     x=OPEN(f,txtfile,'R')
  692.     IF x~=0 THEN
  693.       DO
  694.         DO p=1 TO 9
  695.           line=TRIM(LEFT(READLN(f),74))
  696.           IF EOF(f) THEN LEAVE p
  697.           temp=temp'\'line
  698.         END
  699.         CALL CLOSE(f)
  700.       END
  701.   END
  702. IF Request(,36,temp,,' UPLOAD ',' CANCEL ',QUICKSCREEN)~='OKAY' THEN
  703.   DO
  704.     CALL DELETE(txtfile)
  705.     CALL DELETE(hdrfile)
  706.     RETURN
  707.   END
  708. IF write_hdr(4) THEN RETURN
  709. udir=makepath(arcdir,'Files')
  710. CALL MAKEDIR(udir)
  711. ADDRESS COMMAND 'copy' fullfile udir'/'ufile
  712. temp='If' ufile 'replaces\a previous upload of yours,\'
  713. temp=temp'please enter the file number\of that previous upload.'
  714. n=Request(150,36,temp,'',,' CANCEL ',QUICKSCREEN)
  715. IF ~DATATYPE(n,'W') THEN RETURN
  716. action='Delete'
  717.  
  718. add_number:
  719. fname=arcdir'/File_Requests'
  720. IF action='Delete' THEN fname=arcdir'/File_Deletes'
  721. IF EXISTS(fname) THEN x=OPEN(f,fname,'A')
  722. ELSE x=OPEN(f,fname,'W')
  723. IF x=0 THEN 
  724.   DO
  725.     CALL usermsg(fname 'failed to open for writing!')
  726.     CALL waiting()
  727.     RETURN
  728.   END
  729. CALL WRITELN(f,n)
  730. CALL CLOSE(f)
  731. CALL usermsg('File number' n 'added to' action 'request list.')
  732. CALL waiting()
  733. RETURN
  734.  
  735.  
  736. do_action:
  737. PARSE ARG action 
  738. IF name='' THEN RETURN
  739. n=Request(150,36,'Enter File To' action 'by NUMBER','',,' CANCEL ',QUICKSCREEN)
  740. IF n='' THEN RETURN
  741. IF ~DATATYPE(n,'W') THEN
  742.   DO
  743.     CALL usermsg(action 'requests MUST be made by file NUMBER only!')
  744.     RETURN
  745.   END
  746. ln=search(1 'FILE:' n)
  747. IF ln=0 THEN
  748.   temp='File:' n 'not found in current list\Include in the' action 'Request anyway?'
  749. ELSE
  750.   DO
  751.     lnn=ln+1
  752.     lnnn=ln+2
  753.     temp=text.ln'\'text.lnn'\'TRIM(LEFT(text.lnnn,74))
  754.   END
  755. IF Request(,36,temp,,' 'UPPER(action)' ',' CANCEL ',QUICKSCREEN)~='OKAY' THEN RETURN
  756. IF action~='Change' THEN
  757.   DO
  758.     CALL add_number()
  759.     RETURN
  760.   END
  761. IF sysoplevel>level THEN RETURN
  762. temp3=' ^ indicates no change from the original data in that position.\\'
  763. IF ln>0 THEN temp3=temp'\\'temp3
  764. hdr.=''
  765. hdr.1='File:' n'   KeyWords: ^'
  766. hdr.2='Name: 'LEFT('^',27)' Size: ^ bytes   Downloads: ^'
  767. hdr.3='From: 'LEFT('^',27)' Date: ^ ^ ^ ^  Lib: ^'
  768. hdr.4=RIGHT(WORD(SOURCELINE(1),4)'=====',74,'=')
  769. temp=''
  770. IF ln>0 THEN PARSE VAR text.ln . 'KeyWords: 'temp
  771. x=Request(,20,'Change KeyWords',temp,,' NO ',QUICKSCREEN)
  772. IF x~='' & x~=temp THEN hdr.1='File:' n'   KeyWords:' STRIP(LEFT(x,32))
  773. temp=''
  774. IF ln>0 THEN PARSE VAR text.lnn 'Name: 'temp .
  775. DO test=1
  776.   x=Request(,20,temp3||hdr.1'\\Change FileName',temp,,' NO ',QUICKSCREEN)
  777.   IF x=temp | LENGTH(x)<17 THEN LEAVE test
  778.   CALL usermsg('Your filename is' LENGTH(x)-16 'characters too long!')
  779.   CALL waiting()
  780. END
  781. IF x~='' & x~=temp THEN hdr.2='Name: 'LEFT(x,27)' Size: ^ bytes   Downloads: ^'
  782. temp=''
  783. IF ln>0 THEN PARSE VAR text.lnnn 'From: 'temp .
  784. x=Request(,20,temp3||hdr.1'\'hdr.2'\\Change Uploader',temp,,' NO ',QUICKSCREEN)
  785. IF x~='' & x~=temp THEN hdr.3='From: 'LEFT(x,27)' Date: 'DATE() TIME('C')'  Lib: ^'
  786. temp=''
  787. IF ln>0 THEN PARSE VAR text.lnnn . 'Lib: 'temp
  788. PARSE VAR hdr.3 'From:' temp2 .
  789. x=Request(,20,temp3||hdr.1'\'hdr.2'\'TRIM(LEFT(hdr.3,74))'\\Change Library',temp,,' NO ',QUICKSCREEN)
  790. IF x~='' & x~=temp THEN
  791.   hdr.3='From: 'LEFT(temp2,27)' Date: 'DATE() TIME('C')'  Lib:' x
  792. msgnum=get_number()
  793. IF Request(,20,'Edit the longer file description?',,' YES ',' NO ',QUICKSCREEN)='OKAY' THEN
  794.   DO
  795.     IF ln>0 THEN
  796.       DO
  797.         ii=ln+5
  798.         IF text.ii~='=====' & text.0>=ii THEN
  799.           DO
  800.             x=OPEN(f,txtfile,'W')
  801.             IF x~=0 THEN
  802.               DO ii=ln+4 WHILE text.ii~='=====' & text.0>=ii
  803.                 CALL WRITELN(f,text.ii)
  804.               END
  805.             CALL CLOSE(f)
  806.             CALL DELAY(28)
  807.           END
  808.       END
  809.     CALL editor(txtfile)
  810.   END
  811. temp=temp3||hdr.1'\'hdr.2'\'TRIM(LEFT(hdr.3,74))'\'hdr.4
  812. IF Request(,20,temp,,' CHANGE ',' CANCEL ',QUICKSCREEN)~='OKAY' THEN
  813.   DO
  814.     CALL DELETE(txtfile)
  815.     CALL DELETE(hdrfile)
  816.     RETURN
  817.   END
  818. CALL write_hdr(4)
  819. RETURN
  820.  
  821.  
  822. searchreq:
  823. x=Request(150,36,'Search Phrase?','',,' CANCEL ',QUICKSCREEN)
  824. IF x='' THEN RETURN
  825. num=search(1 x)
  826. IF num=0 THEN
  827.   DO
  828.     CALL usermsg(x 'was not found!')
  829.     CALL waiting()
  830.   END
  831. ELSE CALL show_QUICK(num)
  832. RETURN
  833.  
  834.  
  835. search:
  836. ARG startline' 'searcharg
  837. /* say startline searcharg */
  838. DO si=startline TO text.0
  839.   IF POS(searcharg,UPPER(text.si))>0 THEN RETURN si
  840. END
  841. RETURN 0
  842.  
  843.  
  844. print:
  845. temp=modetext.mode
  846. IF mode=1 THEN temp=email.emailcount 'Email'
  847. IF mode=2 THEN temp=WORD(mess.0.1,messcount) 'Conference'
  848. pdev=Request(150,36,'Print' temp 'To:','PRT:',,' CANCEL ',QUICKSCREEN)
  849. IF pdev='' THEN RETURN
  850. x=OPEN(p,pdev,'W')
  851. IF x=0 THEN
  852.   DO
  853.     CALL usermsg(pdev 'failed to open for printing!')
  854.     CALL waiting()
  855.     RETURN
  856.   END
  857. DO i=1 TO text.0
  858.   CALL WRITELN(p,text.i)
  859. END
  860. CALL CLOSE(p)
  861. RETURN
  862.  
  863.  
  864. newarea:
  865. x=GetFile(150,36,prefs.1,,'Select BBS...',QUICKSCREEN)
  866. IF x='' | ~EXISTS(x) THEN RETURN
  867. finfo=STATEF(x)
  868. IF WORD(finfo,1)='FILE' THEN x=getdir(x)
  869. CALL MAKEDIR(x)
  870. IF ~EXISTS(x) THEN RETURN
  871. workdir=x
  872. CALL PRAGMA('D',workdir)
  873. arcdir=makepath(prefs.3,'OUT/'getfilename(workdir))
  874. CALL MAKEDIR(arcdir)
  875. CALL read_ID()
  876. RETURN
  877.  
  878.  
  879. new:
  880. IF Request(150,36,'Clear this area or change areas?',,' CLEAR ',' NEW BBS ',QUICKSCREEN)='OKAY' THEN
  881.   DO
  882.     CALL usermsg('Clearing work area...')
  883.     CALL clear()
  884.     CALL read_ID()
  885.   END
  886. ELSE CALL newarea()
  887. CALL CloseWindow(QUICKHOST,'CONTINUE')
  888. SIGNAL RESTART
  889. RETURN
  890.  
  891.  
  892. reset_vars:
  893. text.=''
  894. mess.=''
  895. name=''
  896. city=''
  897. bbsname=''
  898. sysop=''
  899. keys=''
  900. mode=0
  901. notices=''
  902. level=0
  903. sysoplevel=99
  904. arcdate=''
  905. RETURN
  906.  
  907.  
  908. clear:
  909. CALL reset_vars()
  910. emdir=''
  911. efdir=''
  912. wemdir=''
  913. wefdir=''
  914. notices=''
  915. ndir=''
  916. IF EXISTS('Notices') THEN ndir='Notices/#? Notices'
  917. IF EXISTS('Email') THEN
  918.   DO
  919.     emdir=SHOWDIR('Email')
  920.     emdir=makepath('Email',WORD(emdir,1))
  921.     wemdir=emdir'/#?'
  922.     emdir=emdir 'Email'
  923.   END
  924. IF EXISTS('EmailFiles') THEN
  925.   DO
  926.     efdir=SHOWDIR('EmailFiles')
  927.     efdir=makepath('EmailFiles',WORD(efdir,1))
  928.     wefdir=efdir'/#?'
  929.     efdir=efdir 'EmailFiles'
  930.   END
  931. IF ndir~='' | wemdir~='' | wefdir~='' | emdir~='' | efdir~='' THEN
  932.   DO
  933.     comm='CD' workdir LF 'delete' ndir wemdir wefdir emdir efdir 'QUIET'
  934.     ADDRESS COMMAND comm
  935.   END
  936. CALL DELETE('Messages')
  937. CALL DELETE('FileList')
  938. RETURN
  939.  
  940.  
  941. openarc:
  942. arcfile=GetFile(150,16,prefs.2,'QUICK_','Select archive to process.',QUICKSCREEN)
  943. IF arcfile='' THEN RETURN
  944. CALL usermsg('Processing archive' arcfile' ...')
  945. newname=name
  946. newbbs=bbsname
  947. comm='CD RAM:' LF 'lha -q x' arcfile '.ID'
  948. ADDRESS COMMAND comm
  949. x=OPEN(f,'RAM:.ID','R')
  950. IF x=0 THEN
  951.   DO
  952.     CALL usermsg(arcfile 'is not a BBBBS QUICKOUT archive!')
  953.     CALL waiting()
  954.     RETURN
  955.   END
  956. newname=SUBSTR(READLN(f),8)
  957. CALL READLN(f)
  958. newbbs=SUBSTR(READLN(f),8)
  959. CALL CLOSE(f)
  960. newbbsnym=STRIP(LEFT(COMPRESS(newbbs," '/:;."),12))
  961. workdir=makepath(prefs.1,newbbsnym)
  962. CALL MAKEDIR(workdir)
  963. CALL PRAGMA('D',workdir)
  964. CALL DELETE('RAM:.ID')
  965. test=''
  966. IF EXISTS('Messages') & newname=name & newbbs=bbsname THEN
  967.   DO
  968.     test=Request(150,36,'Append To The Current Data or Clear?',,' APPEND ',' CLEAR ',QUICKSCREEN)
  969.     CALL usermsg('Processing archive' arcfile' ...')
  970.     IF test='OKAY' THEN
  971.       DO
  972.         CALL RENAME('Messages','Mess1')
  973.         IF EXISTS('FileList') THEN CALL RENAME('FileList','List1')
  974.       END
  975.     ELSE CALL clear()
  976.   END
  977. ELSE CALL clear()
  978. comm='CD' workdir LF 'lha -q x' arcfile
  979. ADDRESS COMMAND comm
  980. IF test='OKAY' THEN
  981.   DO
  982.     IF EXISTS('Mess1') THEN
  983.       DO
  984.         CALL RENAME('Messages','Mess2')
  985.         comm='CD' workdir LF 'join Mess2 Mess1 AS Messages'
  986.         ADDRESS COMMAND comm
  987.       END
  988.     IF EXISTS('List1') THEN
  989.       DO
  990.         CALL RENAME('FileList','List2')
  991.         comm='CD' workdir LF 'join List2 List1 AS FileList'
  992.         ADDRESS COMMAND comm
  993.       END
  994.     comm='CD' workdir LF 'delete Mess? List? QUIET'
  995.     ADDRESS COMMAND comm
  996.   END
  997. CALL read_ID()
  998. CALL load_notices()
  999. CALL sort_email()
  1000. dups.=''
  1001. dups.0=email.0
  1002. indx=1
  1003. DO i=1 TO email.0-1
  1004.   IF LEFT(email.i,3)='MSG' THEN email.i=''
  1005.   n=LASTPOS('.',email.i)
  1006.   IF n=0 THEN email.i=''
  1007.   IF email.i='' THEN ITERATE i
  1008.   thismail=LEFT(email.i,n)
  1009.   DO j=i+1 TO email.0
  1010.     n=LASTPOS('.',email.j)
  1011.     IF n=0 THEN email.j=''
  1012.     IF email.j='' THEN ITERATE i
  1013.     thatmail=LEFT(email.j,n)
  1014.     IF thatmail=thismail THEN
  1015.       DO
  1016.         dups.i=email.j dups.i
  1017.         email.j=''
  1018.       END
  1019.   END
  1020. END
  1021. DO i=1 TO dups.0
  1022.   IF dups.i='' THEN ITERATE i
  1023.   dups.i=email.i dups.i
  1024.   m=''
  1025.   DO j=1 TO WORDS(dups.i)
  1026.     x=OPEN(f,'Email/'name'/'WORD(dups.i,j),'R')
  1027.     IF x=0 THEN
  1028.       DO
  1029.         CALL usermsg('Email/'name'/'WORD(dups.i,j) 'failed to open for reading!')
  1030.         CALL waiting()
  1031.         RETURN
  1032.       END
  1033.     m=m||READCH(f,65000)||LF||LF
  1034.     CALL CLOSE(f)
  1035.     CALL DELETE('Email/'name'/'WORD(dups.i,j))
  1036.   END
  1037.   x=OPEN(f,'Email/'name'/'WORD(dups.i,1),'W')
  1038.   IF x=0 THEN
  1039.     DO
  1040.       CALL usermsg('Email/'name'/'WORD(dups.i,1) 'failed to open for writing!')
  1041.       CALL waiting()
  1042.       RETURN
  1043.     END
  1044.   CALL WRITECH(f,m)
  1045.   CALL CLOSE(f)
  1046. END
  1047. CALL sort_email()
  1048. CALL PostMsg()
  1049. CALL CloseWindow(QUICKHOST,'CONTINUE')
  1050. SIGNAL RESTART
  1051. RETURN
  1052.  
  1053.  
  1054. makepath:
  1055. PARSE ARG tdir,tfile
  1056. xx=RIGHT(tdir,1)
  1057. tpath=tdir
  1058. IF xx~=':' & xx~='/' THEN tpath=tpath'/'
  1059. tpath=tpath||tfile
  1060. RETURN tpath
  1061.  
  1062.  
  1063. read_ID:
  1064. CALL CLOSE(f)
  1065. x=OPEN(f,'.ID','R')
  1066. IF x=0 THEN
  1067.   DO
  1068.     CALL usermsg('.ID failed to open!')
  1069.     CALL waiting()
  1070.     RETURN
  1071.   END
  1072. id.=''
  1073. DO ii=1
  1074.   line=READLN(f)
  1075.   IF EOF(f) THEN LEAVE ii
  1076.   id.ii=line
  1077. END
  1078. id.0=ii-1
  1079. CALL CLOSE(f)
  1080. name=SUBSTR(id.1,8)
  1081. city=SUBSTR(id.2,8)
  1082. bbsname=SUBSTR(id.3,8)
  1083. bbsnym=STRIP(LEFT(COMPRESS(bbsname," '/:;."),12))
  1084. sysop=SUBSTR(id.4,8)
  1085. arcdate=SUBSTR(id.5,8)
  1086. keys=SUBSTR(id.6,8)
  1087. level=WORD(keys,2)
  1088. sysoplevel=WORD(keys,3)
  1089. x=makepath(prefs.3,'OUT')
  1090. arcdir=makepath(x,bbsnym)
  1091. CALL MAKEDIR(arcdir)
  1092. workdir=makepath(prefs.1,bbsnym)
  1093. CALL MAKEDIR(workdir)
  1094. CALL PRAGMA('D',workdir)
  1095. RETURN
  1096.  
  1097.  
  1098. load_notices:
  1099. notices=SHOWDIR('Notices')
  1100. n=FIND(notices,'HELLO')
  1101. IF n>0 THEN notices=DELWORD(notices,n,1)
  1102. n=FIND(notices,'WELCOME')
  1103. IF n>0 THEN notices=DELWORD(notices,n,1)
  1104. n=FIND(notices,'GOODBYE')
  1105. IF n>0 & n<WORDS(notices) THEN notices=DELWORD(notices,n,1) 'Goodbye'
  1106. IF EXISTS('Notices/WELCOME') THEN notices='Welcome' notices
  1107. IF EXISTS('Notices/HELLO') THEN notices='Hello' notices
  1108. noticecount=1
  1109. IF notices='' THEN noticecount=0
  1110. RETURN
  1111.  
  1112.  
  1113. sort_email:
  1114. email.=''
  1115. emailcount=0
  1116. email=SHOWDIR('Email/'name)
  1117. email.0=WORDS(email)
  1118. IF email.0=0 THEN RETURN 1
  1119. email=sortnumbers(email)
  1120. DO i=1 TO WORDS(email)
  1121.   email.i=WORD(email,i)
  1122. END
  1123. IF emailcount>email.0 | emailcount<1 THEN emailcount=1
  1124. RETURN 0
  1125.  
  1126.  
  1127. read_QUICK:
  1128. CALL usermsg('Loading' modetext.mode'...')
  1129. tfile=modetext.mode
  1130. IF mode=0 THEN
  1131.   DO
  1132.     IF notices='' THEN CALL load_notices()
  1133.     IF notices='' THEN tfile=''
  1134.     ELSE tfile='Notices/'WORD(notices,noticecount)
  1135.   END
  1136. IF mode=1 THEN
  1137.   DO
  1138.     tfile=''
  1139.     IF DATATYPE(email.0,'W') & email.0>0 THEN
  1140.       DO
  1141.         DO WHILE emailcount<email.0 & email.emailcount=''
  1142.           emailcount=emailcount+1
  1143.         END
  1144.         tfile='Email/'name'/'email.emailcount
  1145.       END
  1146.     ELSE IF sort_email()=0 THEN
  1147.       DO
  1148.         tfile='Email/'name'/'email.1
  1149.         emailcount=1
  1150.       END
  1151.     ELSE emailcount=0
  1152.   END
  1153. IF mode=2 & DATATYPE(mess.0,'W') THEN
  1154.   DO
  1155.     messcount=1
  1156.     CALL nextitem('FORWARD')
  1157.     CALL PostMsg()
  1158.     RETURN
  1159.   END
  1160. IF tfile='' | ~EXISTS(tfile) THEN
  1161.   DO
  1162.     CALL PostMsg()
  1163.     CALL Move(QUICKHOST,220,100)
  1164.     CALL Text(QUICKHOST,'- No' modetext.mode 'Found -')
  1165.     RETURN
  1166.   END
  1167. text.=''
  1168. IF mode=2 THEN mess.=''
  1169. x=OPEN(f,tfile,'R')
  1170. IF x~=0 THEN
  1171.   DO i=1
  1172.     line=READLN(f)
  1173.     IF mode=2 THEN mess.i=line
  1174.     ELSE text.i=line
  1175.     IF EOF(f) THEN LEAVE i
  1176.   END
  1177. CALL CLOSE(f)
  1178. IF mode=2 THEN
  1179.   DO
  1180.     mess.0=i
  1181.     CALL parse_mess()
  1182.   END
  1183. ELSE
  1184.   DO
  1185.     text.0=i
  1186.     CALL show_QUICK(1)
  1187.   END
  1188. CALL PostMsg()
  1189. RETURN
  1190.  
  1191.  
  1192. show_QUICK:
  1193. ARG startline 
  1194. CALL SetAPen(QUICKHOST,0)
  1195. CALL RectFill(QUICKHOST,12,28,w.cols-12,w.rows-14)
  1196. CALL SetAPen(QUICKHOST,1)
  1197. CALL SetBPen(QUICKHOST,0)
  1198. IF startline+lines_per_page>text.0 THEN startline=text.0+1-lines_per_page
  1199. IF startline<1 THEN startline=1
  1200. DO i=1 TO lines_per_page
  1201.   ii=i-1+startline
  1202.   CALL Move(QUICKHOST,24,29+i*8)
  1203.   CALL Text(QUICKHOST,LEFT(text.ii,chars))
  1204.   IF searcharg='' THEN ITERATE i
  1205.   n=POS(searcharg,UPPER(text.ii))
  1206.   IF n=0 THEN ITERATE i
  1207.   CALL SetAPen(QUICKHOST,2)
  1208.   CALL SetBPen(QUICKHOST,1)
  1209.   CALL Move(QUICKHOST,16+8*n,29+i*8)
  1210.   CALL Text(QUICKHOST,searcharg)
  1211.   CALL SetAPen(QUICKHOST,1)
  1212.   CALL SetBPen(QUICKHOST,0)
  1213. END
  1214. lastline=startline+i-2
  1215. IF mode<3 THEN
  1216.   DO
  1217.     CALL SetAPen(QUICKHOST,1)
  1218.     CALL SetBPen(QUICKHOST,3)
  1219.     CALL Move(QUICKHOST,30,7)
  1220.     IF mode=0 THEN
  1221.       temp=noticecount'/'WORDS(notices) WORD(notices,noticecount)
  1222.     ELSE IF mode=2 THEN temp=messcount'/'WORDS(mess.0.1) WORD(mess.0.1,messcount)
  1223.     ELSE temp=emailcount'/'email.0 email.emailcount
  1224.     temp=LEFT(temp,74-LENGTH(STRIP(w.title)))
  1225.     CALL Text(QUICKHOST,temp)
  1226.   END
  1227. IF text.0=0 THEN temp=100
  1228. ELSE temp=((.005+lastline/text.0)*100)%1
  1229. IF temp>100 THEN temp=100
  1230. temp=RIGHT(temp,4)
  1231. CALL SetAPen(QUICKHOST,2)
  1232. CALL SetBPen(QUICKHOST,1)
  1233. CALL Move(QUICKHOST,w.cols-58,34)
  1234. CALL Text(QUICKHOST,temp'% ')
  1235. searcharg=''
  1236. RETURN
  1237.  
  1238.  
  1239. parse_mess:
  1240. CALL PostMsg()
  1241. CALL usermsg('Setting Up Message Conferences...')
  1242. mess.0.0=1
  1243. mess.0.1='Header'
  1244. DO i=1 TO mess.0
  1245.   conf=''
  1246.   PARSE VAR mess.i 'Entering' conf 'Message Conference..'
  1247.   IF conf='' THEN ITERATE i
  1248.   mess.0.0=mess.0.0 i
  1249.   mess.0.1=mess.0.1 conf
  1250. END
  1251. messcount=1
  1252. CALL nextitem('FORWARD')
  1253. RETURN
  1254.  
  1255.  
  1256. filltext:
  1257. ARG top bot 
  1258. text.=''
  1259. DO i=top TO bot
  1260.   ii=1+i-top
  1261.   text.ii=mess.i
  1262. END
  1263. text.0=i-top
  1264. RETURN
  1265.  
  1266.  
  1267. page:
  1268. ARG direction
  1269. IF direction='UP' THEN temp=lastline
  1270. IF direction='BACK' THEN temp=lastline+2-2*lines_per_page
  1271. IF direction='ZIP' THEN
  1272.   DO
  1273.     IF lastline>lines_per_page THEN temp=1
  1274.     ELSE temp=text.0
  1275.   END
  1276. CALL show_QUICK(temp)
  1277. RETURN
  1278.  
  1279.  
  1280. line:
  1281. ARG direction
  1282. IF direction='UP' THEN temp=startline+1
  1283. IF direction='BACK' THEN temp=startline-1
  1284. CALL show_QUICK(temp)
  1285. RETURN
  1286.  
  1287.  
  1288. nextitem:
  1289. ARG direction 
  1290. IF mode=0 & notices~='' THEN
  1291.   DO
  1292.     IF direction='FORWARD' THEN noticecount=noticecount+1
  1293.     ELSE noticecount=noticecount-1
  1294.     IF noticecount>WORDS(notices) THEN noticecount=1
  1295.     IF noticecount<1 THEN noticecount=WORDS(notices)
  1296.     CALL read_QUICK()
  1297.   END
  1298. IF mode=1 & DATATYPE(email.0,'W') THEN
  1299.   DO
  1300.     IF direction='FORWARD' THEN emailcount=emailcount+1
  1301.     ELSE
  1302.       DO
  1303.         emailcount=emailcount-1
  1304.         DO WHILE emailcount>0 & email.emailcount=''
  1305.           emailcount=emailcount-1
  1306.         END
  1307.       END
  1308.     IF emailcount>email.0 THEN emailcount=1
  1309.     IF emailcount<1 THEN emailcount=email.0
  1310.     CALL read_QUICK()
  1311.   END
  1312. IF mode=2 & WORDS(mess.0.1)>0 THEN
  1313.   DO
  1314.     IF direction='FORWARD' THEN messcount=messcount+1
  1315.     ELSE messcount=messcount-1
  1316.     IF messcount>WORDS(mess.0.1) THEN messcount=1
  1317.     IF messcount<1 THEN messcount=WORDS(mess.0.1)
  1318.     a=WORD(mess.0.0,messcount)
  1319.     IF messcount=WORDS(mess.0.1) THEN b=mess.0+1
  1320.     ELSE b=WORD(mess.0.0,messcount+1)-1
  1321.     CALL filltext(a b)
  1322.     CALL show_QUICK(1)
  1323.   END
  1324. RETURN
  1325.  
  1326.  
  1327. sortnumbers: PROCEDURE
  1328. PARSE ARG slist
  1329. IF STRIP(slist)='' THEN RETURN ''
  1330. sorted.=''
  1331. oldest=999999
  1332. newest=0
  1333. newlist=''
  1334. DO si=1 TO WORDS(slist)
  1335.   testword=WORD(slist,si)
  1336.   IF ~DATATYPE(testword,'W') THEN
  1337.     DO
  1338.       testpos=LASTPOS('.',testword)
  1339.       IF testpos>0 THEN tempnum=SUBSTR(testword,testpos+1)
  1340.       ELSE
  1341.         DO
  1342.           newlist=testword newlist
  1343.           ITERATE si
  1344.         END
  1345.     END
  1346.   ELSE tempnum=testword/1
  1347.   IF sorted.tempnum='' THEN
  1348.     DO
  1349.       sorted.tempnum=testword
  1350.       sorted.tempnum.0=1
  1351.       IF DATATYPE(tempnum,'W') THEN
  1352.         DO
  1353.           IF tempnum>newest THEN newest=tempnum
  1354.           IF tempnum<oldest THEN oldest=tempnum
  1355.         END
  1356.     END
  1357.   ELSE newlist=newlist testword
  1358. END
  1359. IF oldest~=999999 & newest~=0 THEN
  1360.   DO si=oldest TO newest
  1361.     IF sorted.si.0=1 THEN newlist=newlist sorted.si
  1362.   END
  1363. RETURN STRIP(newlist)
  1364.  
  1365.  
  1366. whichmode:
  1367. ARG test 
  1368. IF test=1 THEN mode=mode+1
  1369. IF mode>5 THEN mode=0
  1370. CALL CloseWindow(QUICKHOST,CONTINUE)
  1371. SIGNAL RESTART
  1372. RETURN;
  1373.  
  1374.  
  1375. boxes:
  1376. CALL box(QUICKHOST,1,1,11,27,w.cols-22,w.rows-40)
  1377. RETURN
  1378.  
  1379.  
  1380. box:
  1381. ARG host,pen1,pen2,upleft,uptop,width,height
  1382. CALL SetAPen(host,pen2)
  1383. CALL Move(host,upleft+width+1,uptop)
  1384. CALL Draw(host,upleft+width+1,uptop+height)
  1385. CALL Draw(host,upleft-1,uptop+height)
  1386. CALL Move(host,upleft+width,uptop+1)
  1387. CALL Draw(host,upleft+width,uptop+height)
  1388. CALL SetAPen(host,pen1)
  1389. CALL Move(host,upleft,uptop)
  1390. CALL Draw(host,upleft+width,uptop)
  1391. CALL Move(host,upleft,uptop+height-1)
  1392. CALL Draw(host,upleft,uptop)
  1393. CALL Move(host,upleft-1,uptop)
  1394. CALL Draw(host,upleft-1,uptop+height)
  1395. RETURN
  1396.  
  1397.  
  1398. usermsg:
  1399. PARSE ARG umsg
  1400. umsg=STRIP(LEFT(umsg,74))
  1401. CALL PostMsg()
  1402. IF ScreenCols(QUICKSCREEN)>0 THEN
  1403.   CALL PostMsg((w.cols-40-LENGTH(umsg)*8)%2,60,umsg,QUICKSCREEN)
  1404. ELSE SAY umsg
  1405. RETURN
  1406.  
  1407.  
  1408. waiting:
  1409. CALL DELAY(150)
  1410. CALL PostMsg()
  1411. RETURN
  1412.  
  1413.  
  1414. setup_screen:
  1415. s.=''
  1416. s.modes='HIRES'
  1417. s.title=prgversion'   -   BBBBS OffLine Read/Reply Module'
  1418. IF ScreenRows(QUICKSCREEN)>0 THEN RETURN
  1419. IF OpenScreen(,2,s.modes,s.title,QUICKSCREEN)=0 THEN
  1420.   CALL ALL_DONE('Error!  Could not open bbsQUICK screen... Exiting.')
  1421. RETURN
  1422.  
  1423.  
  1424. setup_host:
  1425. ADDRESS AREXX  "'x=createhost(QUICKHOST,QUICKPORT,QUICKSCREEN)'"
  1426. DO 200 WHILE ~SHOW('Ports','QUICKHOST')
  1427.   CALL DELAY 10  /* 200 ms */
  1428. END
  1429. IF ~SHOW('Ports','QUICKHOST') THEN
  1430.   CALL ALL_DONE('Could not open host QUICKHOST.')
  1431. RETURN
  1432.  
  1433.  
  1434. info:
  1435. infotext=        '     User:' name'\'
  1436. infotext=infotext'     City:' city'\\'
  1437. infotext=infotext'      BBS:' bbsname'\'
  1438. infotext=infotext'    SysOp:' sysop'\'
  1439. infotext=infotext'     Keys:' keys'\'
  1440. temp=arcfile
  1441. IF temp='ARCFILE' | temp='' THEN temp='QUICK_'WORD(keys,1)'.lha'
  1442. ELSE
  1443.   DO
  1444.     n=LASTPOS('/',temp)
  1445.     IF n=0 THEN n=LASTPOS(':',temp)
  1446.     IF n>0 THEN temp=SUBSTR(temp,n+1)
  1447.   END
  1448. infotext=infotext'  Arcfile:' temp'\'
  1449. infotext=infotext' Archived:' arcdate'\\'
  1450. infotext=infotext'KickStart:' ksversion'\'
  1451. infotext=infotext'WorkBench:' wbversion'\\'
  1452. infotext=infotext'   Memory:' comma(STORAGE()) 'bytes free.'
  1453. CALL Request(170,45,infotext,,,,QUICKSCREEN)
  1454. RETURN
  1455.  
  1456.  
  1457. set_colors:
  1458. ARG host
  1459. IF prefs.0='' THEN prefs.0='10 10 10 0 0 0 15 15 15 12 8 8'
  1460. CALL SetRGB4(host,0,WORD(prefs.0,1),WORD(prefs.0,2),WORD(prefs.0,3))
  1461. CALL SetRGB4(host,1,WORD(prefs.0,4),WORD(prefs.0,5),WORD(prefs.0,6))
  1462. CALL SetRGB4(host,2,WORD(prefs.0,7),WORD(prefs.0,8),WORD(prefs.0,9))
  1463. CALL SetRGB4(host,3,WORD(prefs.0,10),WORD(prefs.0,11),WORD(prefs.0,12))
  1464. RETURN
  1465.  
  1466.  
  1467. tofront:
  1468. ARG host
  1469. CALL set_colors(host)
  1470. CALL ActivateWindow(host)
  1471. CALL ScreenToFront(QUICKSCREEN)
  1472. RETURN
  1473.  
  1474.  
  1475. getnames:
  1476. PARSE ARG tdir,tfile,ptext
  1477. x=GetFile(150,16,tdir,tfile,ptext,QUICKSCREEN)
  1478. RETURN x
  1479.  
  1480.  
  1481. getdir:
  1482. PARSE ARG full .
  1483. IF full='' THEN RETURN ''
  1484. n=LASTPOS('/',full)
  1485. IF n=0 THEN n=LASTPOS(':',full)
  1486. IF n=0 THEN tdir=''
  1487. ELSE
  1488.   DO
  1489.     tdir=LEFT(full,n)
  1490.     IF RIGHT(tdir,1)='/' THEN tdir=LEFT(tdir,n-1)
  1491.   END
  1492. RETURN tdir
  1493.  
  1494.  
  1495. getfilename:
  1496. PARSE ARG full .
  1497. IF full='' THEN RETURN ''
  1498. n=LASTPOS('/',full)
  1499. IF n=0 THEN n=LASTPOS(':',full)
  1500. IF n=0 THEN tfile=full
  1501. ELSE tfile=SUBSTR(full,n+1)
  1502. tfile=COMPRESS(tfile,' ,;|#?*')  /* be sure no illegals here */
  1503. RETURN tfile
  1504.  
  1505.  
  1506. config:
  1507. ARG action .
  1508. IF action='LOAD' THEN
  1509.   DO
  1510.     x=getnames(prefsdir,prefsfile,'Load Preferences File ')
  1511.     IF x='' THEN RETURN 1
  1512.     prefsdir=getdir(x)
  1513.     prefsfile=getfilename(x)
  1514.     CALL get_prefs()
  1515.   END
  1516. IF action='SAVE' THEN
  1517.   DO
  1518.     x=getnames(prefsdir,prefsfile,'Save Preferences File ')
  1519.     IF x='' THEN RETURN 2
  1520.     prefsdir=getdir(x)
  1521.     prefsfile=getfilename(x)
  1522.     CALL save_prefs()
  1523.   END
  1524. IF action='SET' THEN
  1525.   DO
  1526.     CALL CloseWindow(QUICKHOST,'CONTINUE')
  1527.     SIGNAL START_PREFS
  1528.   END
  1529. RETURN 0
  1530.  
  1531.  
  1532. get_prefs:
  1533. prefspath=makepath(prefsdir,prefsfile)
  1534. x=OPEN(f,prefspath,'R')
  1535. IF x=0 THEN
  1536.   DO
  1537.     CALL usermsg(prefspath 'failed to open!')
  1538.     CALL waiting()
  1539.     RETURN
  1540.   END
  1541. prefs.=''
  1542. DO i=0 TO 9
  1543.   prefs.i=READLN(f)
  1544. END
  1545. CALL CLOSE(f)
  1546. CALL MAKEDIR(prefs.1)
  1547. CALL MAKEDIR(prefs.2)
  1548. CALL MAKEDIR(prefs.3)
  1549. CALL PRAGMA('D',prefs.1)
  1550. arcdir=makepath(prefs.3,'OUT')
  1551. CALL MAKEDIR(arcdir)
  1552. RETURN
  1553.  
  1554.  
  1555. new_colors:
  1556. col=''
  1557. DO i=0 TO 3
  1558.   col=col ScreenColor(QUICKSCREEN,i)
  1559. END
  1560. RETURN STRIP(col)
  1561.  
  1562.  
  1563. save_prefs:
  1564. prefspath=makepath(prefsdir,prefsfile)
  1565. x=OPEN(f,prefspath,'W')
  1566. IF x=0 THEN
  1567.   DO
  1568.     CALL usermsg(prefspath 'failed to open!')
  1569.     CALL waiting()
  1570.     RETURN
  1571.   END
  1572. prefs.0=new_colors()
  1573. DO i=0 TO 9
  1574.   CALL WRITELN(f,prefs.i)
  1575. END
  1576. CALL CLOSE(f)
  1577. RETURN
  1578.  
  1579.  
  1580. comma:
  1581. NUMERIC DIGITS 14     /* largest number of digits ARexx can handle */
  1582. ARG num .
  1583. mant = num - num%1  /* anything to the right of the decimal point? */
  1584. IF mant = 0 THEN mant = ''
  1585. ELSE
  1586.   DO
  1587.     mant = SUBSTR(mant,2)       /* if yes, then remove leading "0" */
  1588.     num = num % 1                      /* make num into an integer */
  1589.   END
  1590. dgt = LENGTH(num)                       /* number of digits in num */
  1591. numtext = ''
  1592. IF dgt>3 THEN numtext = ','RIGHT(num,3)
  1593. IF dgt>6 THEN numtext = ','LEFT(RIGHT(num,6),3)||numtext
  1594. IF dgt>9 THEN numtext = ','LEFT(RIGHT(num,9),3)||numtext
  1595. IF dgt>12 THEN
  1596.   DO
  1597.     numtext = ','LEFT(RIGHT(num,12),3)||numtext
  1598.     numtext = LEFT(num,dgt-12)||numtext
  1599.   END
  1600. ELSE IF dgt>9 THEN numtext = LEFT(num,dgt-9)||numtext
  1601. ELSE IF dgt>6 THEN numtext = LEFT(num,dgt-6)||numtext
  1602. ELSE IF dgt>3 THEN numtext = LEFT(num,dgt-3)||numtext
  1603. ELSE numtext = num
  1604. numtext = numtext||mant          /* replace any decimal point data */
  1605. RETURN numtext
  1606.  
  1607.  
  1608. getversions:
  1609. ADDRESS COMMAND 'version >RAM:VERSION'
  1610. x=OPEN(f,'RAM:VERSION','R')
  1611. line=READLN(f)
  1612. CALL CLOSE(f)
  1613. CALL DELETE('RAM:VERSION')
  1614. wbversion=WORD(line,4)
  1615. IF ~DATATYPE(wbversion,'N') THEN
  1616.   DO
  1617.     wbversion=WORD(line,6)
  1618.     ksversion=WORD(line,3)
  1619.   END
  1620. ELSE ksversion=WORD(line,2)
  1621. IF RIGHT(ksversion,1)=',' THEN ksversion=LEFT(ksversion,LENGTH(ksversion)-1)
  1622. RETURN
  1623.  
  1624.  
  1625. setup_variables:
  1626. CALL reset_vars()
  1627. modetext.=''
  1628. modetext.0='Notices'
  1629. modetext.1='EMail'
  1630. modetext.2='Messages'
  1631. modetext.3='Conferences'
  1632. modetext.4='FileList'
  1633. modetext.5='Libraries'
  1634. startline=1
  1635. CALL OPENPORT(QUICKPORT)
  1636. CALL getversions()
  1637. prefs.=''
  1638. prefsdir='s:'
  1639. prefsfile='bbsQUICK.prefs'
  1640. prefspath=makepath(prefsdir,prefsfile)
  1641. IF EXISTS(prefspath) THEN CALL get_prefs()
  1642. ELSE
  1643.   DO
  1644.     prefs.1='RAM:Q'
  1645.     CALL MAKEDIR(prefs.1)
  1646.     CALL PRAGMA('D',prefs.1)
  1647.     arcdir=makepath(prefs.3,'OUT')
  1648.     CALL MAKEDIR(arcdir)
  1649.   END
  1650. x=SOURCELINE(1)
  1651. prgversion=''
  1652. DO i=3 TO 4
  1653.   prgversion=STRIP(prgversion WORD(x,i))
  1654. END
  1655. abouttext=CENTER(prgversion,32)'\\
  1656.   © 1993 Richard Lee Stockton\
  1657.      Voice:   206-776-1253\
  1658.        FAX:   206-775-7573\
  1659.        BBS:   206-744-1254\\
  1660.       FREELY DISTRIBUTABLE\
  1661.  AS LONG AS THIS NOTICE REMAINS'
  1662. prefshelp='
  1663. - Work Dir -\
  1664. This is the directory where the QUICK_ archive will be decompressed,\
  1665. and from which the data files then will be read.\\
  1666.  - Download Dir -\
  1667. This should be your terminal program''s download directory where the\
  1668. QUICK_ archive (from the BBS to you) can be located.\\
  1669.  - Upload Dir -\
  1670. This should be your terminal program''s upload directory where the\
  1671. QUICKIN archive (from you to the BBS) can be built. Make sure that\
  1672. it is located somewhere other than RAM: so that data won''t be lost\
  1673. if the power goes off! A directory called OUT is made here and the\
  1674. OUTgoing (back to BBS) files are stored here for later archival.\\
  1675.  - Editor -\
  1676. Your choice of editor. Memacs works well, as does Ed.'
  1677. mainhelp='This should be the main help file, eh?  ;-)'
  1678. LF='0A'x
  1679. FF='0C'x
  1680. QT='22'x
  1681. IF ~SHOW('Ports','QUICKPORT') THEN
  1682.   CALL ALL_DONE('Could not open port QUICKPORT.')
  1683. RETURN
  1684.  
  1685.  
  1686. /* end of bbsQUICK.rexx */
  1687.